'use strict'

const fs = require('fs');   //读写文件模块
const path = require('path'); //路径模块
const router = require('koa-router')();  //路由模块


//注册JS文件暴露出来的键值对

var fn_registerRouter = (router, js_acceptFile) => {
    //循环出JS暴露的所有对象
    for (var fn in js_acceptFile) {
        // console.log(fn);
        // console.log(js_acceptFile[fn]);

        // 获取暴露出来的键值对中的键
        var valueArr = js_acceptFile[fn];

        //获取暴露出来的请求类型
        var type = valueArr[0];
        //获取暴露出来的异步函数
        // var fn_js = valueArr[1];

        if (type === 'get') {   // 判断请求类型
            //  判断键值对含几个值
            if (valueArr.length === 2){ // 2个值
                var fn_js = valueArr[1];
                router.get(fn, fn_js);
            }else{  // 不等于2个值
                var auth = valueArr[1];
                var fn_js = valueArr[2];
                router.get(fn,auth,fn_js);
            }
                
        } else if (type === 'post') {   // 判断请求类型
            //  判断键值对含几个值
            if (valueArr.length === 2){ // 2个值
                var fn_js = valueArr[1];
                router.post(fn, fn_js);
            }else{  // 不等于2个值
                var auth = valueArr[1];
                var fn_js = valueArr[2];
                router.post(fn,auth,fn_js);
            }
        }
    }
}


var js_filterFile = (router) => {

    //获取当前目录的所有文件
    var currentDirFile = fs.readdirSync(__dirname);
    // console.log(currentDirFile);

    //获取当前的文件
    var currentFile = path.basename(__filename);

    //过滤出所有JS文件 并且 不要当前的文件
    var filterFile = currentDirFile.filter(fileName => {
        return fileName.endsWith('.js') && fileName !== currentFile;
    })


    //循环出筛选后的JS文件
    filterFile.forEach(item => {
        //将筛选出来的JS文件拼接成完整路径
        var fullPath = path.join(__dirname, item);
        // console.log(fullPath);

        //接收JS文件中暴露的对象
        var js_acceptFile = require(fullPath);

        fn_registerRouter(router, js_acceptFile)

    })
}


module.exports = function () {
    js_filterFile(router);    //router是路由模块
    return router.routes();
}
